<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 一、
        //AO={
        // a = undefined ---function a() {}   ----123;
        // b = undefined ----234;
        // }
        // 函数预编译结束！！！


        // function test(a, b) {
        //     console.log(a); //f a(){}//因为函数a被提升了!所以输出a函数
        //     console.log(b); //undefined
        //     var b = 234;
        //     console.log(b); //234
        //     a = 123;
        //     console.log(a); //123

        //     function a() {}
        //     var a;
        //     b = 234;
        //     var b = function() {}
        //     console.log(a); //123
        //     console.log(b); //f(){}
        // }
        // test(1);

        // // 二、
        // AO{
        //    e=undefined ---function e() {}= arguments[0] = 2;
        // b=undefined;
        // c=undefined;
        // a=undefined ---10;
        // }
        // a = 100;

        // function demo(e) {
        //     function e() {}
        //     arguments[0] = 2;
        //     console.log(e); //2
        //     if (a) {
        //         var b = 123;
        //     }
        //     var c;
        //     a = 10;
        //     var a;
        //     console.log(b); //undefined,因为if里面定义的var会被提升，提升后if里面的条件不成立所以不执行if里的语句；
        //     f = 123;
        //     console.log(c); //undefined
        //     console.log(a); //10
        // }
        // var a;
        // demo(1);
        // console.log(a); //100
        // console.log(f); //123

        // // 三、
        // GO{
        // global = undefined;
        // }
        // global = 100;

        // function fn() {
        //     // AO={global:undefined}
        //     console.log(global); //undefined
        //     global = 200;
        //     console.log(global); //200
        //     var global = 300;
        // }

        // fn();
        // var global;

        // // 四、
        //  GO{
        //  a=undefined---123----function a() {}
        //  b=undefined---10
        //  d=undefined
        //  c=undefined---function c() {}
        //  }  因为函数会被提升到顶部

        //AO{
        // a:5
        // }
        function a(a) {
            var d;
            var c;
            b = 10;
            var a;
            console.log(a); //f a(){}
            a = 123;

            function a() {}
            console.log(a); //123
            var b;
            console.log(b); //10

            function c() {}
            console.log(c); // f c(){}
            console.log(d); //undefined
            d = 100;
            console.log(d); //100
        }
        a(5);
    </script>
</body>

</html>